![](/img/trans.png)
[英]Python Dataframe : Update the values of a column in a dataframe based on another dataframe
[英]Split dataframe based on column values of another dataframe in python
我有以下数据框:
Date Country Type Consumption
01/01/2019 Fr IE 186
02/01/2019 Fr IE 131
01/01/2019 Fr SE 115
02/01/2019 Fr SE 141
03/01/2019 Fr SE 158
01/01/2019 Po DK 208
01/01/2019 Po IE 150
02/01/2019 Po IE 136
01/01/2019 Po SE 210
02/01/2019 Po SE 195
03/01/2019 Po SE 160
01/01/2019 Hk DK 229
01/01/2019 Hk IE 159
02/01/2019 Hk IE 210
01/01/2019 Hk SE 130
02/01/2019 Hk SE 179
03/01/2019 Hk SE 143
我想按国家/地区和类型将其拆分为多个数据帧。 例如我想要
df_1:
df_2:
df_3:
df_4:
& 很快 ...
我创建了另一个数据框
df = pd.DataFrame({
"Country": ["Fr", "Po"],
"Type": ["IE", "SE"]})
因为我只想根据“df”中的这些值创建新的数据框
使用了以下代码:
#create unique list of names
UniqueNames = pd.unique(df[['Country','Type']].values.ravel())
DataFrameDict = {elem : pd.DataFrame for elem in UniqueNames}
for key in DataFrameDict.keys():
DataFrameDict[key] = df3[:][df3.Country == key]
但这并不能达到目的,我正在获取具有所有类型值的数据帧。
如何做到这一点?
我还尝试了以下代码:
d = {}
for name, group in df3.groupby(['City','Type']):
d['group_' + str(name)] = group
但问题是它为 City & Type 的每个独特组合创建了数据框,而我只需要几个组合。
数据框名称也像 d["group_('Fr', 'IE')"] d["group_('Fr', 'SE')"]
我可以将这些名称更改为更简单的名称,例如 Fr_IE Fr_SE,因为我需要在这些数据帧中的每一个上运行许多其他函数
将具有所需值的数据帧转换为元组列表,以便能够对其进行循环和过滤
tuples = [tuple(x) for x in df.values]
最后,使用列表中的每个项目过滤原始数据框,在这里我打印每个项目,但您可能想做其他事情......
for mytuple in tuples:
print(original_df[(original_df['Country'] == mytuple[0]) & (original_df['Type'] == mytuple[1])])
要将每个数据帧保存在一个新变量中,您可以使用列表进行操作:
my_dfs = [df[(df['Country'] == mytuple[0]) & (df['Type'] == mytuple[1])] for mytuple in tuples]
for my_df in my_dfs:
print(my_df)
鉴于我正确理解了这个问题,如果您只是像下面那样定义关键数据帧 df :
df = pd.DataFrame({
"Country": ["Fr", "Po"],
"Type": ["IE", "SE"]})
您缺少其他组合,例如:['Fr','SE'] 和 ['Po','IE']。
我解决了以下问题。 希望这可以帮助:
import pandas as pd
# I put your original data in a file called data.txt
# and read it into a dataframe called df_data
df_data = pd.read_csv('data.txt', sep=',')
print(df_data)
# Creating a dataframe of all selected country and type pairs
df_temp = df_data.groupby(['Country', 'Type']).size().reset_index(name='Count')
df = df_temp[df_temp['Country'].isin(['Fr', 'Po']) & df_temp['Type'].isin(['IE', 'SE'])].drop('Count', axis=1)
print(df)
# Then loop through the tuples
tuples = [tuple(x) for x in df.values]
my_dfs = [df_data[(df_data['Country'] == mytuple[0]) & (df_data['Type'] == mytuple[1])] for mytuple in tuples]
for my_df in my_dfs:
print(my_df)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.