如何从两个现有的单索引数据帧创建多索引数据帧? - python

我有两个要合并的数据帧,并在合并过程中进行乘法。两者之前都有一个索引,并且生成的数据帧应具有多索引:

位置资料

village   rainfall/year
namea     20
nameb     15
namec     30

和时间序列数据。

hour    share of yearly rainfall
0       50.00%
1       30.00%
2       20.00%

我正在寻找以下数据框。

village     hour    rainfall
namea       0       10
            1       6
            2       4
nameb       0       7.5
            1       4.5
            2       3
namec       0       15
            1       9
            2       6

因此,我不仅要合并它们,而且还要在合并过程中进行一些计算。可悲的是,我不知道如何实现这一目标。我认为Multiindex from product可能会有所帮助,但我还没有弄清楚该怎么做。
提前致谢!

python参考方案

您将merge与一个临时键一起使用以创建笛卡尔乘积,然后计算您的值和set_index。

df_out = df_loc.assign(key=1).merge(df_ts.assign(key=1)).drop('key', axis=1)
df_out['rainfall'] = df_out['rainfall/year'] * (df_out['share of yearly rainfall'].str.strip('%').astype(float) / 100)

df_out.set_index(['village','hour'])['rainfall']

输出:

village  hour
namea    0       10.0
         1        6.0
         2        4.0
nameb    0        7.5
         1        4.5
         2        3.0
namec    0       15.0
         1        9.0
         2        6.0
Name: rainfall, dtype: float64

或返回一个数据框而不是pd.Series,请使用双括号:

df_out.set_index(['village','hour'])[['rainfall']]

输出:

              rainfall
village hour          
namea   0         10.0
        1          6.0
        2          4.0
nameb   0          7.5
        1          4.5
        2          3.0
namec   0         15.0
        1          9.0
        2          6.0

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…

用逗号格式化数字以在Python中分隔成千上万 - python

我有一个大数据框,其中有一列称为Lead Rev。此列是一个数字字段,例如(100000或5000等)。我想知道如何格式化这些数字以将逗号显示为千位分隔符。数据集有超过200,000行。是这样的吗:'{:,}'.format('Lead Rev')这给出了这个错误:---------------------------…